package com.cy.pj.sys.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import com.cy.pj.common.vo.Node;
import com.cy.pj.sys.entity.SysMenu;

/**
 * 
 * @author Administrator
 *	@Mapper一般用于描述数据层接口对象
 *		表示此接口对象的实现类由系统底层自动创建，并且会在此接口的实现类中注入
 *		SqlSessionFactory对象
 */
@Mapper
public interface SysMenuDao {
	/**
	 * 	查询所有的菜单以及菜单对应的上级菜单信息
	 * 	要求：一行记录映射为内存中一个map对象
	 * 	说明：在很多优秀的产品级应用中其实不推荐
	 * 		直接基于做映射存储,因为1.可读性较差2.值类型不可控
	 * 		但是有时为了提高开发的速度 map就可以直接作为映射
	 * 		存储对象,尤其是一些外包项目
	 * @return
	 */
	List<Map<String,Object>> findObjects();
	
	/**
	 * 	基于id查询子菜单记录
	 * @param id 菜单id
	 * @return 子菜单的数量
	 */
	int getChildCount(Integer id);
	
	/**
	 * 	基于菜单id删除菜单记录
	 * @param id 菜单id
	 * @return 删除的行数
	 */
	int deleteObject(Integer id);
	
	
	/**
	 * 	查询上级菜单相关信息(获取所有菜单的菜单id 菜单名 上级菜单id)
	 * 	然后一个记录存储到一个Node对象中
	 * @return
	 */
	@Select("select id,name,parentId from sys_menus")
	List<Node> findZtreeMenuNodes();
	
	/**
	 * 	将内存中的菜单对象持久化(存储到数据库)
	 * @param entity
	 * @return
	 */
	int insertObject(SysMenu entity);
	
	/**
	 * 	更新数据库中的菜单的内容
	 * @param entity
	 * @return
	 */
	int updateObject(SysMenu entity);
	
}
















